/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

jQuery(document).ready(function() {
    $('.tooltip-title').tooltip();

    $('.btn').click(function() {

        var id = $(this).attr('id');
        switch (id) {
            case 'form-uniforme-btn':
                generarUniforme();
                break;
            case 'form-exponencial-btn':
                generarExponencial();
                break;
            case 'form-normal-btn':
                generarNormal();
                break;
            case 'form-poisson-btn':
                generarPoisson();
                break;    
        }
    });

    function generarUniforme()
    {
        var desde = parseFloat($('input[name="uniforme[a]"]').val());
        var hasta = parseFloat($('input[name="uniforme[b]"]').val());
        var cantRnd = parseFloat($('input[name="uniforme[num-rnd]"]').val());
        var intervalos = parseFloat($('input[name="uniforme[int]"]').val());
        //al pedo este objeto pero quedo asi por una llamada anterior
        var options = {'desde': desde, 'hasta': hasta, 'cantRnd': cantRnd, 'intervalos': intervalos};
        //$('.rand').remove();
        var dInicio = new Date();
        //Primero armamos los intervalos
        var longitudIntervalo = ((options.hasta - options.desde) / options.intervalos);
        var vIntervalos = new Array();
        var vDatos = new Array();

        for (var i = 1; i <= options.intervalos; i++)
        {
            //Aca le hago un fix para que el intervalo este comprendido entre Desde y Hasta
            var intIndex = options.desde + parseFloat((longitudIntervalo * i).toFixed(2));
            vIntervalos.push(intIndex);
            vDatos.push(0);
        }
        //if(!validar())
        //return false;

        for (var i = 0; i < options.cantRnd; i++)
        {
            lastIndex = i + 1;
            var num = Math.random().toFixed(3);

            for (var j = 0; j < vIntervalos.length; j++)
            {
                //Aca aplicamos la formula de Uniforme
                var fRandom = parseFloat(((options.hasta - options.desde) * num) + options.desde);
                if (fRandom <= parseFloat(vIntervalos[j]))
                {
                    vDatos[j] = vDatos[j] + 1;
                    break;
                }
            }
        }

        //Acá empezamos a hacer todo lo del gráfico
        var vValores = new Array();
        var obj = new Object();
        obj.name = 'Números';
        obj.data = vDatos;
        vValores.push(obj);
        graficarLinea('grafico', 'Distribución Uniforme', 'Utilizando números aleatorios', 'Cantidad', ' ocurrencias', vIntervalos, vValores);
        var dFin = new Date();

        $('#labelTiempo').text("Tiempo transcurrido: " + (dFin - dInicio) + " milisegundos.");
    }


    function generarExponencial()
    {
        var lamda = parseFloat($('input[name="exponencial[lamda]"]').val());
        var cantRnd = parseFloat($('input[name="exponencial[num-rnd]"]').val());
        var intervalos = parseFloat($('input[name="exponencial[int]"]').val());
        //al pedo este objeto pero quedo asi por una llamada anterior
        var options = {'lamda': lamda, 'cantRnd': cantRnd, 'intervalos': intervalos};
        //$('.rand').remove();
        var dInicio = new Date();
        //Primero armamos los intervalos
        var longitudIntervalo = 1 / options.intervalos;
        var vIntervalos = new Array();
        var vDatos = new Array();

        for (var i = 1; i <= options.intervalos; i++)
        {
            vIntervalos.push(parseFloat((longitudIntervalo * i).toFixed(2)));
            vDatos.push(0);
        }
        //if(!validar())
        //return false;

        for (var i = 0; i < options.cantRnd; i++)
        {
            lastIndex = i + 1;
            var num = Math.random().toFixed(3);

            for (var j = 0; j < vIntervalos.length; j++)
            {
                var fRandom = parseFloat(((1 / options.lamda) * (-1)) * Math.log(num));

                if (fRandom <= parseFloat(vIntervalos[j]))
                {
                    vDatos[j] = vDatos[j] + 1;
                    break;
                }
            }
        }

        //Acá empezamos a hacer todo lo del gráfico
        var vValores = new Array();
        var obj = new Object();
        obj.name = 'Números';
        obj.data = vDatos;
        vValores.push(obj);
        graficarLinea('grafico', 'Distribución Exponencial', 'Utilizando números aleatorios', 'Cantidad', ' ocurrencias', vIntervalos, vValores);
        var dFin = new Date();

        $('#labelTiempo').text("Tiempo transcurrido: " + (dFin - dInicio) + " milisegundos.");
    }

    function generarNormal()
    {
        var cantRnd = parseFloat($('input[name="normal[num-rnd]"]').val());
        var intervalos = parseFloat($('input[name="normal[int]"]').val());
        var media = parseFloat($('input[name="normal[media]"]').val());
        var varianza = parseFloat($('input[name="normal[varianza]"]').val());

        //al pedo este objeto pero quedo asi por una llamada anterior
        var options = {'media': media, 'varianza': varianza, 'cantRnd': cantRnd, 'intervalos': intervalos};
        //$('.rand').remove();
        var dInicio = new Date();
        //Primero armamos los intervalos
        var longitudIntervalo = 1;
        var vIntervalos = new Array();
        var vDatos = new Array();

        for (var i = (media - (options.intervalos / 2)); i <= (media + (options.intervalos / 2)); i++)
        {
            vIntervalos.push(parseFloat((longitudIntervalo * i).toFixed(2)));
            vDatos.push(0);
        }
        //if(!validar())
        //return false;

        for (var i = 0; i < options.cantRnd; i++)
        {
            lastIndex = i + 1;

            var fSumatoria = 0;

            for (var k = 1; k <= 12; k++)
            {
                var num = parseFloat(Math.random().toFixed(3));
                fSumatoria = parseFloat(fSumatoria) + num;

            }

            fSumatoria = fSumatoria - 6;

            var fRandom = parseFloat(options.media) + (fSumatoria * options.varianza);

            for (var j = 0; j < vIntervalos.length; j++)
            {
                //Aca aplicamos la formula de Normal
                //alert("rnd: " + fRandom);
                if (fRandom <= parseFloat(vIntervalos[j]))
                {
                    vDatos[j] = vDatos[j] + 1;
                    break;
                }
            }
        }

        //Acá empezamos a hacer todo lo del gráfico
        var vValores = new Array();
        var obj = new Object();
        obj.name = 'Números';
        obj.data = vDatos;
        vValores.push(obj);
        graficarLinea('grafico', 'Distribución Normal', 'Utilizando números aleatorios', 'Cantidad', ' ocurrencias', vIntervalos, vValores);
        var dFin = new Date();

        $('#labelTiempo').text("Tiempo transcurrido: " + (dFin - dInicio) + " milisegundos.");
    }
    function generarPoisson()
    {
        var cantRnd = parseFloat($('input[name="poisson[num-rnd]"]').val());
        var intervalos = parseFloat($('input[name="poisson[int]"]').val());
        var media = parseFloat($('input[name="poisson[media]"]').val());
        //var varianza = parseFloat($('input[name="normal[varianza]"]').val());

        //al pedo este objeto pero quedo asi por una llamada anterior
        var options = {'media': media, 'cantRnd': cantRnd, 'intervalos': intervalos};
        //$('.rand').remove();
        var dInicio = new Date();
        //Primero armamos los intervalos
        var vIntervalos = new Array();
        var vDatos = new Array();
        
		var datos= new Array();
		
		for(var j=0;j<options.cantRnd;j++)
		{
			var b=1;
			var a=Math.exp(media*(-1));
			var i =0;
			
			while(b>a)
			{
				var x = Math.random().toFixed(3);
				b=b*x;
				i=i+1;
				
			}
			
			datos.push(i);
		}
		
		//console.log(datos);
		
	
		
		for(var i=0;i<datos.length;i++)
		{
			if(!isNumeric(vDatos[datos[i]]))
				vDatos[datos[i]]=0;
			
			vDatos[datos[i]]=vDatos[datos[i]]+1;
		}
		
		for(var i=1;i<=vDatos.length;i++)
		{
			vIntervalos[i]=i;
		}
		
		console.log(vDatos);
		console.log(vIntervalos);
		
		vDatos[0]=0;
		vIntervalos[0]=0;

        //Acá empezamos a hacer todo lo del gráfico
        var vValores = new Array();
        var obj = new Object();
        obj.name = 'Números';
        obj.data = vDatos;
        vValores.push(obj);
        graficarLinea('grafico', 'Distribución de Poisson', 'Utilizando números aleatorios', 'Cantidad', ' ocurrencias', vIntervalos, vValores);
        var dFin = new Date();

        $('#labelTiempo').text("Tiempo transcurrido: " + (dFin - dInicio) + " milisegundos.");
    }
    
});